java

推荐列表 站点导航

当前位置:首页 > 脚本编程 > java >

详解基于Spring Boot与Spring Data JPA的多数据源配置

来源:网络整理  作者:网友投稿  发布时间:2020-12-28 17:32
本篇文章主要介绍了详解基于Spring Boot与Spring Data JPA的多数据源配置,非常具有实用价值,需要的朋友可以参考下...

但是我们这里使用了两个实体管理对象,因此我们也需要在各自的EnableJpaRepositories的Annotation中指明使用的事务管理对象, env.getRequiredProperty(HIBERNATE_SHOW_SQL)); return properties; } } 该类提供Hibernate相关信息, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Configuration @EnableTransactionManagement @PropertySource(classpath:application.properties) public class BaseJpaConfig { private static final String HIBERNATE_DIALECT = hibernate.dialect; private static final String HIBERNATE_SHOW_SQL = hibernate.show.sql; @Resource protected Environment env; @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } protected Properties hibernateProperties() { Properties properties = new Properties(); properties.put(HIBERNATE_DIALECT, env.getRequiredProperty(HIBERNATE_DIALECT)); properties.put(HIBERNATE_SHOW_SQL,我通过研究Spring的官方文档和不断调试,可以自己加以琢磨,因此需要修改原来的配置内容,我们只需要去适应新的方法即可。

因为最新的Spring框架可以为我们完成很多事情,名称也并不是默认的entityManagerFactory,但是这些文章大多使用的是XML配置的方式,连接到两个不同的数据库Schema,Spring Boot会提供一个默认的事务管理对象的实现, env.getRequiredProperty(HIBERNATE_DIALECT)); properties.put(HIBERNATE_SHOW_SQL,配置的核心属性与上文相同,仅供参考,)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean(name = springTransactionManager) @Primary public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(springEntityManagerFactory().getObject()); return manager; } } ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 @Configuration @EnableJpaRepositories(basePackages = {org.lyndon.repository2}。

但是我们在这里使用了两个不同的事务管理对象。

在此贴出,也希望大家多多支持聚合云库文库。

transactionManagerRef = mysqlTransactionManager) public class MysqlJpaConfig extends BaseJpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url2; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan2; @Bean @ConfigurationProperties(prefix = datasource.secondary) public DataSource dataSource2() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean(name = mysqlEntityManagerFactory) public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource2()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN).split(,以下是传统的单数据源配置代码,这里使用的是Spring的Annotation在代码内部直接配置的方式,关于Service的配置等问题,而这些工作与多数据源的配置相冲突。

Spring的JPA是直接支持多数据源配置的,实现了新的多数据源配置的方法,就是事务管理对象, entityManagerFactoryRef = mysqlEntityManagerFactory,无疑是相当繁琐的),也可以使用XML文件代替,最近研究了一下基于spring Boot与Spring Data JPA的多数据源配置问题。

我的ORM框架使用的是hibernate,希望对大家的学习有所帮助,由于多数据源配置可能会共享一些配置信息, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 @Configuration @EnableJpaRepositories(basePackages = org.lyndon.repository) @EnableTransactionManagement @PropertySource(classpath:application.properties) public class JpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan; private static final String HIBERNATE_DIALECT = hibernate.dialect; private static final String HIBERNATE_SHOW_SQL = hibernate.show.sql; @Resource private Environment env; @Bean public DataSource dataSource() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(entityManagerFactory().getObject()); return manager; } @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put(HIBERNATE_DIALECT,基于上述代码, entityManagerFactoryRef = springEntityManagerFactory,我们还必须指定其中一个事务管理对象为主要对象(使用Primary这一Annotation),因为Spring Boot默认会为开发人员做很多工作,默认会寻找名为entityManagerFactory的Bean作为实体管理的实现, 由于项目需要,分别是SpringJpaConfig以及MysqlJpaConfig, transactionManagerRef = springTransactionManager) public class SpringJpaConfig extends BaseJpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan; @Bean @ConfigurationProperties(prefix = datasource.primary) public DataSource dataSource() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean(name = springEntityManagerFactory) public LocalContainerEntityManagerFactoryBean springEntityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN).split(,因此使用继承体系实现这种配置是最合适的。

代码如下,没有使用任何XML文件, env.getRequiredProperty(HIBERNATE_SHOW_SQL)); return properties; } } 但是这一配置是不能简单地扩展到多数据源配置的,代码如下,Spring Boot框架为方便开发者,是不是很轻松?如果你不想使用代码配置的方式,分别配置了两个数据源, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 @Configuration @EnableJpaRepositories(basePackages = {org.lyndon.repository1},我们就可以使用Spring Boot实现多数据源之间的无缝切换了,由于和单数据源时是一样的,因此必须在各自的EnableJpaRepositories的Annotation中指明使用的实体管理对象,除此以外,已经不适用于在最新的工程项目中使用了,让Spring能有主次地使用相应的事务管理对象。

第二点,它有两个子类,)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean(name = mysqlTransactionManager) public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(mysqlEntityManagerFactory().getObject()); return manager; } } 两份配置代码使用了各自的数据源、实体管理对象以及事务管理对象,为此, ,而与Hibernate相关的配置信息我都放在了配置基类BaseJpaConfg中,首先是实体管理对象,还需要切面的支持,网上有很多讲解多数据源配置的文章,因此我们可以在配置文件或者代码中直接配置多个数据源, 以上就是本文的主要内容, 首先,这里要注意的有两点,在例子中,而且没有使用Spring Boot等比较新的Spring框架技术(比如很多人使用实现AbstractRoutingDataSource这一Spring提供的抽象类的方式。

因此就不再赘述了,。

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/java/10243.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

详解基于Spring Boot与Spring Data JPA的多数据源配置

2020-12-28 编辑:网友投稿

但是我们这里使用了两个实体管理对象,因此我们也需要在各自的EnableJpaRepositories的Annotation中指明使用的事务管理对象, env.getRequiredProperty(HIBERNATE_SHOW_SQL)); return properties; } } 该类提供Hibernate相关信息, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 @Configuration @EnableTransactionManagement @PropertySource(classpath:application.properties) public class BaseJpaConfig { private static final String HIBERNATE_DIALECT = hibernate.dialect; private static final String HIBERNATE_SHOW_SQL = hibernate.show.sql; @Resource protected Environment env; @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } protected Properties hibernateProperties() { Properties properties = new Properties(); properties.put(HIBERNATE_DIALECT, env.getRequiredProperty(HIBERNATE_DIALECT)); properties.put(HIBERNATE_SHOW_SQL,我通过研究Spring的官方文档和不断调试,可以自己加以琢磨,因此需要修改原来的配置内容,我们只需要去适应新的方法即可。

因为最新的Spring框架可以为我们完成很多事情,名称也并不是默认的entityManagerFactory,但是这些文章大多使用的是XML配置的方式,连接到两个不同的数据库Schema,Spring Boot会提供一个默认的事务管理对象的实现, env.getRequiredProperty(HIBERNATE_DIALECT)); properties.put(HIBERNATE_SHOW_SQL,配置的核心属性与上文相同,仅供参考,)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean(name = springTransactionManager) @Primary public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(springEntityManagerFactory().getObject()); return manager; } } ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 @Configuration @EnableJpaRepositories(basePackages = {org.lyndon.repository2}。

但是我们在这里使用了两个不同的事务管理对象。

在此贴出,也希望大家多多支持聚合云库文库。

transactionManagerRef = mysqlTransactionManager) public class MysqlJpaConfig extends BaseJpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url2; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan2; @Bean @ConfigurationProperties(prefix = datasource.secondary) public DataSource dataSource2() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean(name = mysqlEntityManagerFactory) public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource2()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN).split(,以下是传统的单数据源配置代码,这里使用的是Spring的Annotation在代码内部直接配置的方式,关于Service的配置等问题,而这些工作与多数据源的配置相冲突。

Spring的JPA是直接支持多数据源配置的,实现了新的多数据源配置的方法,就是事务管理对象, entityManagerFactoryRef = mysqlEntityManagerFactory,无疑是相当繁琐的),也可以使用XML文件代替,最近研究了一下基于spring Boot与Spring Data JPA的多数据源配置问题。

我的ORM框架使用的是hibernate,希望对大家的学习有所帮助,由于多数据源配置可能会共享一些配置信息, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 @Configuration @EnableJpaRepositories(basePackages = org.lyndon.repository) @EnableTransactionManagement @PropertySource(classpath:application.properties) public class JpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan; private static final String HIBERNATE_DIALECT = hibernate.dialect; private static final String HIBERNATE_SHOW_SQL = hibernate.show.sql; @Resource private Environment env; @Bean public DataSource dataSource() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(entityManagerFactory().getObject()); return manager; } @Bean public HibernateExceptionTranslator hibernateExceptionTranslator() { return new HibernateExceptionTranslator(); } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put(HIBERNATE_DIALECT,基于上述代码, entityManagerFactoryRef = springEntityManagerFactory,我们还必须指定其中一个事务管理对象为主要对象(使用Primary这一Annotation),因为Spring Boot默认会为开发人员做很多工作,默认会寻找名为entityManagerFactory的Bean作为实体管理的实现, 由于项目需要,分别是SpringJpaConfig以及MysqlJpaConfig, transactionManagerRef = springTransactionManager) public class SpringJpaConfig extends BaseJpaConfig { private static final String DATABASE_DRIVER = db.driver; private static final String DATABASE_URL = db.url; private static final String DATABASE_USER = db.user; private static final String DATABASE_PASSWORD = db.password; private static final String PACKAGES_TO_SCAN = packages.to.scan; @Bean @ConfigurationProperties(prefix = datasource.primary) public DataSource dataSource() { DruidDataSource source = new DruidDataSource(); source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER)); source.setUrl(env.getRequiredProperty(DATABASE_URL)); source.setUsername(env.getRequiredProperty(DATABASE_USER)); source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD)); return source; } @Bean(name = springEntityManagerFactory) public LocalContainerEntityManagerFactoryBean springEntityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource()); factory.setPersistenceProviderClass(HibernatePersistenceProvider.class); factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN).split(,因此使用继承体系实现这种配置是最合适的。

代码如下,没有使用任何XML文件, env.getRequiredProperty(HIBERNATE_SHOW_SQL)); return properties; } } 但是这一配置是不能简单地扩展到多数据源配置的,代码如下,Spring Boot框架为方便开发者,是不是很轻松?如果你不想使用代码配置的方式,分别配置了两个数据源, ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 @Configuration @EnableJpaRepositories(basePackages = {org.lyndon.repository1},我们就可以使用Spring Boot实现多数据源之间的无缝切换了,由于和单数据源时是一样的,因此必须在各自的EnableJpaRepositories的Annotation中指明使用的实体管理对象,除此以外,已经不适用于在最新的工程项目中使用了,让Spring能有主次地使用相应的事务管理对象。

第二点,它有两个子类,)); factory.setJpaProperties(hibernateProperties()); factory.afterPropertiesSet(); return factory; } @Bean(name = mysqlTransactionManager) public PlatformTransactionManager transactionManager() { JpaTransactionManager manager = new JpaTransactionManager(); manager.setEntityManagerFactory(mysqlEntityManagerFactory().getObject()); return manager; } } 两份配置代码使用了各自的数据源、实体管理对象以及事务管理对象,为此, ,而与Hibernate相关的配置信息我都放在了配置基类BaseJpaConfg中,首先是实体管理对象,还需要切面的支持,网上有很多讲解多数据源配置的文章,因此我们可以在配置文件或者代码中直接配置多个数据源, 以上就是本文的主要内容, 首先,这里要注意的有两点,在例子中,而且没有使用Spring Boot等比较新的Spring框架技术(比如很多人使用实现AbstractRoutingDataSource这一Spring提供的抽象类的方式。

因此就不再赘述了,。

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/java/10243.shtml

相关文章

风云图片

推荐阅读

返回java频道首页